using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Web.UI.MobileControls;
using System.Collections.Generic;
using FEL.BOD;

public partial class BOD_BOD_UNIDAD_LISTADO : PaginaBaseTreeGrid
{
    public string _nodo;
    public string _padre;
    public string _id;
    public string _codigo;
    public string _ref;
    protected override Type TipoObjeto
    {
        get { return typeof(Bod_Unidad); }
    }

    protected override TreeView Trv
    {
        get { return TrvBodUnidadListado; }
    }

    protected override FormView Frv
    {
        get { return null; }
    }

    protected override ObjectDataSource OdsFrv
    {
        get { return null; }
    }

    protected override Button ResponderZoom
    {
        get { return null; }
    }

    protected override Button RegresoZoom
    {
        get { return null; }
    }

    protected override Koala.KoalaWebControls.KFiltro Filtro
    {
        get { return null; }
    }

    protected override string Contenedor
    {
        get { return "BOD_UNIDAD_LISTADO"; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        base.Page_Load(sender, e);
        if (!IsPostBack)
        {
            ActualizarDatos();
            EtiquetarBotones();
            if (Trv.SelectedNode == null)
                Btn_Bod_Unidad_Listado_Unidad.Enabled = false;
        }
    }   

    private void EtiquetarBotones()
    {
        Btn_Bod_Unidad_Listado_Unidad.Text = GetLocalResourceObject("Btn_Bod_Unidad_Listado_UnidadRecursoKCG.Text").ToString();
        Btn_Bod_Unidad_Listado_Unidad.ToolTip = GetLocalResourceObject("Btn_Bod_Unidad_Listado_UnidadRecursoKCG.ToolTip").ToString();
    }

    private void ActualizarDatos()
    {
        TrvBodUnidadListado.Nodes.Clear();
        List<Bod_Unidad> lstMetaLista = ObtenerMetadatosArbol((Scope)Session["Scope"]);        
        ArmarArbol(TrvBodUnidadListado.Nodes, lstMetaLista);
    }    

    private void ArmarArbol(TreeNodeCollection raiz, List<Bod_Unidad> lstArbolMetadatos)
    { 
        List<Bod_Unidad> nodosReferencia = sacarHijos(null, "REF", lstArbolMetadatos);
        for (int indiceNuevo = 0; indiceNuevo < nodosReferencia.Count; indiceNuevo++)
        {
            TreeNode nodoReferencia = AgregarNodo(nodosReferencia[indiceNuevo], raiz);

            List<Bod_Unidad> nodosMultiplos = sacarHijos(nodosReferencia[indiceNuevo].Id, "MUL", lstArbolMetadatos);
            if (nodosMultiplos.Count > 0)
            {
                TreeNode nodoCabeceraMultiplo = AgregarNodo(nodosMultiplos[0].Tipo_Nombre, nodosMultiplos[0].Tipo, nodoReferencia.ChildNodes);                
                for(int indm = 0; indm <  nodosMultiplos.Count; indm++)
                {
                    TreeNode nodosMulGrupo = AgregarNodo(nodosMultiplos[indm], nodoCabeceraMultiplo.ChildNodes);
                }
            }

            List<Bod_Unidad> nodosSubMultiplos = sacarHijos(nodosReferencia[indiceNuevo].Id, "SUB", lstArbolMetadatos);            
            if (nodosSubMultiplos.Count > 0)
            {
                TreeNode nodoCabeceraSubMultiplo = AgregarNodo(nodosSubMultiplos[0].Tipo_Nombre, nodosSubMultiplos[0].Tipo, nodoReferencia.ChildNodes);                
                for (int inds = 0; inds < nodosSubMultiplos.Count; inds++ )
                {
                    TreeNode nodosSubGrupo = AgregarNodo(nodosSubMultiplos[inds], nodoCabeceraSubMultiplo.ChildNodes);
                }
            }
        }
    }

    private TreeNode AgregarNodo(Bod_Unidad metaNodoHijo, TreeNodeCollection raizNodo)
    {
        TreeNode nodoHijo = new TreeNode(metaNodoHijo.Nombre, metaNodoHijo.Id +"|||"+ metaNodoHijo.Codigo +"|||"+ metaNodoHijo.Bod_Unidad_Id);        
        nodoHijo.SelectAction = TreeNodeSelectAction.Select;
        nodoHijo.PopulateOnDemand = false;
        raizNodo.Add(nodoHijo);        
        return nodoHijo; 
    }

    private TreeNode AgregarNodo(string tipoNombre, string tipo, TreeNodeCollection raizNodo)
    {
        TreeNode nodoHijo = new TreeNode(tipoNombre, tipo);
        nodoHijo.SelectAction = TreeNodeSelectAction.None;
        nodoHijo.PopulateOnDemand = false;
        raizNodo.Add(nodoHijo);
        return nodoHijo;
    }

    private List<Bod_Unidad> sacarHijos(string padreId, List<Bod_Unidad> lstMetadatos)
    {
        List<Bod_Unidad> lstHijosObtenidos = new List<Bod_Unidad>();
        for (int indice = 0; indice < lstMetadatos.Count; indice++)
        {
            if (lstMetadatos[indice].Bod_Unidad_Id == padreId)
            {
                lstHijosObtenidos.Add(lstMetadatos[indice]);
                lstMetadatos.RemoveAt(indice);
                indice--;
            }
        }
        return lstHijosObtenidos;
    }

    private List<Bod_Unidad> sacarHijos(string padreId, string tipo, List<Bod_Unidad> lstMetadatos)
    {
        List<Bod_Unidad> lstHijosObtenidos = new List<Bod_Unidad>();
        for (int indice = 0; indice < lstMetadatos.Count; indice++)
        {
            if (lstMetadatos[indice].Bod_Unidad_Id == padreId && lstMetadatos[indice].Tipo == tipo)
            {
                lstHijosObtenidos.Add(lstMetadatos[indice]);
                lstMetadatos.RemoveAt(indice);
                indice--;
            }
        }
        return lstHijosObtenidos;
    }

    private List<Bod_Unidad> ObtenerMetadatosArbol(Scope s)
    {
        BO_Bod_Unidad boBodUnidad = new BO_Bod_Unidad();        
        List<Bod_Unidad> lstBodUnidad = null;
        try
        {
            lstBodUnidad = boBodUnidad.Get("Nombre", (Scope) Session["Scope"]);
        }
        catch { }
        return lstBodUnidad;
    }

    protected void TrvBodUnidadListado_SelectedNodeChanged(object sender, EventArgs e)
    {
        Btn_Bod_Unidad_Listado_Unidad.Enabled = true;        
    }

    protected void Btn_Bod_Unidad_Listado_Unidad_Click(object sender, EventArgs e)
    {        
        if (Trv.SelectedNode.Parent != null)
            _padre = Trv.SelectedNode.Parent.Text;
        else
            _padre = "";
        
        TreeNode nodopapa = Trv.SelectedNode;

        while (nodopapa.Parent != null)
        {
            nodopapa = nodopapa.Parent;
        }

        string [] smpapa = nodopapa.Value.Split(new string[] { "|||" }, StringSplitOptions.RemoveEmptyEntries);
        _id = smpapa[0];
        _codigo = smpapa[1];
        _nodo = nodopapa.Text;

        if (_padre == "MULTIPLOS")
        {          
            Response.Redirect("~/BOD/MULTIPLOS_BOD_UNIDAD.aspx?Bod_Unidad_Id=" + _id + "&Ref_Bod_Unidad_Codigo=" + _codigo + "&Ref_Bod_Unidad_Nombre=" + _nodo);
        }
        if (_padre == "SUBMULTIPLOS")
        {            
            Response.Redirect("~/BOD/SUBMULTIPLOS_BOD_UNIDAD.aspx?Bod_Unidad_Id=" + _id + "&Ref_Bod_Unidad_Codigo=" + _codigo + "&Ref_Bod_Unidad_Nombre=" + _nodo);
        }
        if (_padre == "")
            Response.Redirect("~/BOD/BOD_UNIDAD.aspx?Bod_Unidad_Id=" + _id);        
    }
}
